[pytest] pytest |
您所在的位置:网站首页 › python mock数据 › [pytest] pytest |
什么是mock
写测试写到一定程度,就会发现,不做mock是不行的, 一个长达5个小时的计算代码,总不能每次测试都跑一次吧? 这个时候我们就需要mock住代码 所谓mock,简单理解就是模拟代码的行为, 并不真正运行代码本身,从而能够减少重复测试,减少测试的时间. pytest-mock python自带的单元测试库是unittest,有对应的unittest.mock 可以来进行mock. pytest对应的mock就是pytest-mock module. 我个人更加喜欢使用pytest, pytest里的mocker也相对简单一些, 大部分unittest.mock的接口, mocker都是支持的. 比如mocker.patch() 和mock 的patch接口是一样的, 参考 https://docs.python.org/3/library/unittest.mock.html#patch Mocker mocker.patch mocker.patch.object mocker.patch.multiple mocker.patch.dict mocker.stopall Assert{mock}.assert_not_called() {mock}.assert_called() {mock}.assert_called_with() {mock}.assert_called_once() {mock}.assert_called_once_with() {mock}.assert_has_calls() {mock}.assert_any_call() 使用方法举例 import os def tt(): os.remove('fake_path') class TestTry: def test_tt(self): remove = mocker.patch('os.remove') tt() remove.assert_called_once()注意你引入的mock的module不一定要是一个第三方包,也可以是你自己的python代码, 比如mypython.py, 使用 'import mypython' 这样就可以测试你自己写的代码. patch的必须是一个已经存在的东西,可以使用{module}.{function}来调用的这种. 如果想要mock你的py代码引用的module里的function,则需要在你的py代码里使用 'from module import function',在测试代码里就可以使用 mypython.function 来对其进行mock 测试代码 mypython_test.py import mypython def test_mypython(mocker): remove = mocker.patch('mypython.remove') mypython.main() remove.assert_called_once()
你的代码 mypython.py from os import remove def main(): remove('fake_path')
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |